home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / misc / TCS.lha / TCS / examples / sources / TriBuf&Zm.s < prev    next >
Text File  |  2000-04-13  |  5KB  |  176 lines

  1. *******************************************************************************
  2. * triple buffering & zoom example
  3. *******************************************************************************
  4. * INFO    loads a 320x256x8 ILBM and then zooms it in onto a triple
  5. *    buffered FullRes screen
  6. * NOTE    - optionally you can pass as CLI argument the names of the
  7. *      320x256x8 IFF/ILBMs to load (if not one of those supplied in
  8. *      TCS/examples/pix/, make sure that yours is exactly 320x256x8
  9. *      and that it respects all the restrictions of TCS_LdILBM(),
  10. *      otherwise the program won't execute or the graphics will
  11. *      look bad - not dangerous, anyway!)
  12. *    - LMB to exit anytime
  13. *******************************************************************************
  14.  
  15.     machine    68020
  16.  
  17.     include    INCLUDES:libraries/tcs.i
  18.     include    INCLUDES:libraries/tcs_lib.i
  19.  
  20.  
  21.  
  22. *******************************************************************************
  23. * custom display & other definitions
  24. *******************************************************************************
  25.  
  26. DSPLWD    =    320    ;our TCS display width and
  27. DSPLHT    =    256    ;height in 140 ns pixels
  28. SCRWD    =    320    ;TCS screen width and
  29. SCRHT    =    256    ;height in pixels
  30. DSPLX0    =    $81*4    ;display start
  31. DSPLY0    =    $2c    ;position (SHRES pixels)
  32. DSPLX1    =    DSPLX0+DSPLWD*4    ;display end
  33. DSPLY1    =    DSPLY0+DSPLHT    ;position (SHRES pixels)
  34. DSPLBRTNS    =    256    ;max brightness
  35. GFXCTXT    =    0
  36. CWBTM    =    0
  37. CWTOP    =    0
  38. CWRT    =    0
  39. CWLF    =    0
  40. VDOMODE    set    TCS_VM_RGBW | TCS_VMf_FullRes ;TCS display video mode
  41. VDOMODE    set    VDOMODE | TCS_VMf_TriBuf
  42.  
  43. ARGSNO    =    1    ;command line arguments no.
  44.  
  45. STP    =    2    ;zoom step (multiple of 2)
  46. TXTRWD    =    DSPLWD    ;source texture has the
  47. TXTRHT    =    DSPLHT    ;same dimensions of display
  48.     ifgt    SCRWD-SCRHT
  49. DF    =    SCRHT/2
  50.     else
  51. DF    =    SCRWD/2
  52.     endif
  53. LPS    =    DF/STP    ;numbers of loops to perform
  54.  
  55.  
  56.  
  57. *******************************************************************************
  58. * code start
  59. *******************************************************************************
  60.  
  61.     include    /includes/macros.i
  62.     include    /includes/shl_strtup.i
  63.  
  64.  
  65.  
  66. *******************************************************************************
  67. * init
  68. *******************************************************************************
  69.  
  70. _PrgInit    movea.l    CmdLnArgs,a0    ;ILBM filename address
  71.     tst.l    a0
  72.     bne.s    .ld    ;if filename specified...
  73.     lea.l    PicFlNm,a0    ;default ILBM
  74. .ld    suba.l    a1,a1    ;to separate buffer
  75.     CALLTCS    LdILBM    ;load it
  76.     cmpi.l    #TCS_PE_OK,d0    ;success?
  77.     blo.s    .fail    ;if not...
  78.     move.l    d0,ILBMStrcAdr    ;else store its ILBM structure address
  79.  
  80.     movea.l    DIAdr,a0    ;our display
  81.     move.b    (TCS_II_RGBxMode.w,d0.l),d0 ;get ILBM0's RGBx mode
  82.     move.w    #256,d1    ;max brightness
  83.     CALLTCS    SetRGBx    ;set appropriate palette
  84.  
  85.     move.w    #0,ccr    ;OK!
  86.     rts
  87.  
  88. .fail    move.w    #4,ccr    ;signal error
  89.     rts
  90.  
  91.  
  92.  
  93. *******************************************************************************
  94. * main
  95. *******************************************************************************
  96.  
  97. _PrgMain    move.l    #TriBufHndlr,([_VBR.l],$6c.w) ;set level3 autovector
  98.     move.w    #$c020,$dff09a    ;set INTENA.VERTB
  99.  
  100.     movea.l    ([ILBMStrcAdr.l],TCS_II_GfxAdr.w),a3 ;texture address
  101.     lea.l    ZmStrc,a2    ;info about the zoom areas
  102.     move.w    #LPS-1,d6    ;loops counter
  103.  
  104. .lp    subq.w    #STP,(8,a2)    ;enlarge
  105.     subq.w    #STP,(10,a2)    ;the destination
  106.     addq.w    #STP,(12,a2)    ;area
  107.     addq.w    #STP,(14,a2)    ;on the screen
  108.  
  109.     movea.l    DIAdr,a0    ;our display
  110.     movea.l    a3,a1    ;texture address
  111.     move.w    #TXTRWD,d0    ;texture width
  112.     CALLTCS    FitTxtr4    ;zoom in!
  113.  
  114.     movea.l    DIAdr,a0    ;render FullRes
  115.     move.w    (8,a2),d0    ;screen to make
  116.     move.w    (10,a2),d1    ;changes visible
  117.     move.w    (12,a2),d2    ;(for speed-up,
  118.     move.w    (14,a2),d3    ;only the area
  119.     move.w    d0,d4    ;written by
  120.     move.w    d1,d5    ;FitTxtr4()
  121.     CALLTCS    CPUFRPass2    ;is updated)
  122.  
  123.     movea.l    DIAdr,a0    ;acknowledge screen
  124.     CALLTCS    TriUpd    ;rendering completion
  125.  
  126.     btst.b    #6,$bfe001
  127.     dbeq.s    d6,.lp    ;if not LMB...
  128.  
  129.     WTLMB
  130.     rts
  131.  
  132.  
  133.  
  134. *******************************************************************************
  135. * cleanup
  136. *******************************************************************************
  137.  
  138. _PrgClnUp    movea.l    ILBMStrcAdr,a0    ;free all the memory
  139.     CALLTCS    UnLdILBM    ;allocated for the ILBM
  140.     rts
  141.  
  142.  
  143.  
  144. *******************************************************************************
  145. * triple buffer handler (level 3 interrupt handler)
  146. *******************************************************************************
  147.  
  148. TriBufHndlr    btst.b    #5,$dff01f
  149.     beq.s    .exit    ;if not INTREQR.VERTB...
  150.     movem.l    d0-d1/a0-a1/a6,-(sp)
  151.  
  152.     movea.l    DIAdr,a0
  153.     CALLTCS    TriSwp    ;swap screen buffers
  154.  
  155.     movem.l    (sp)+,d0-d1/a0-a1/a6
  156. .exit    move.w    #$70,$dff09c    ;clr INTREQ.BLIT/VERTB/COPER
  157.     rte
  158.  
  159.  
  160.  
  161. *******************************************************************************
  162. * data
  163. *******************************************************************************
  164.  
  165.     include    /includes/dat.i
  166.  
  167.     cnop    0,4
  168. ZmStrc    dc.w    0,0    ;source
  169.     dc.w    TXTRWD-1,TXTRHT-1    ;area
  170.     dc.w    DF,DF    ;destination
  171.     dc.w    SCRWD-DF-1,SCRHT-DF-1    ;area
  172.  
  173. ILBMStrcAdr    dc.l    0    ;ILBM structure pointer
  174. tmplt    dc.b    "ILBM/K",0    ;template for ReadArgs()
  175. PicFlNm    dc.b    "/pix/TM_rgbm.iff",0    ;default ILBM
  176.